Postgress 使用笔记
在使用 Docker 部署的 PostgreSQL 中,导出数据的过程与普通 PostgreSQL 数据库类似,但需要通过 Docker 容器来操作。以下是具体步骤:
1. 确认 PostgreSQL 容器正在运行
首先,确保 PostgreSQL 容器正在运行。
运行以下命令查看容器列表:
docker ps
找到 PostgreSQL 容器的 CONTAINER ID 或 NAME,例如 postgres-container。
2. 进入 PostgreSQL 容器
使用 docker exec 命令进入 PostgreSQL 容器的终端:
docker exec -it <container_name_or_id> bash
例如:
docker exec -it postgres-container bash
进入容器后,你可以使用 PostgreSQL 提供的命令行工具(如 pg_dump)进行数据导出。
3. 使用 pg_dump 导出数据
进入容器后,使用以下命令导出 PostgreSQL 数据。
导出单个数据库
使用 pg_dump 导出特定数据库:
pg_dump -U <用户名> -d <数据库名> -F c -f /tmp/<导出文件名>.dump
示例:
pg_dump -U postgres -d mydb -F c -f /tmp/mydb.dump
-U:指定 PostgreSQL 用户名(如postgres)。-d:指定要导出的数据库名(如mydb)。-F c:指定导出格式为自定义格式(c)。-f:指定导出文件的路径(如/tmp/mydb.dump)。
导出为 SQL 脚本
如果需要导出为 SQL 文件:
pg_dump -U postgres -d mydb -F p -f /tmp/mydb.sql
导出整个数据库集群
如果需要导出容器中所有的数据库,可以使用 pg_dumpall:
pg_dumpall -U postgres -f /tmp/all_databases.sql
4. 将导出的文件拷贝到主机
导出完成后,文件会保存在容器内部。需要将文件拷贝到主机上。
使用 docker cp 命令:
docker cp <container_name_or_id>:/tmp/<导出文件名>.dump <主机路径>
例如:
docker cp postgres-container:/tmp/mydb.dump /home/user/mydb.dump
5. 退出容器
完成操作后,可以退出容器:
exit
6. 直接从主机导出数据(可选)
如果不想进入容器,也可以直接在主机上运行 docker exec 命令来导出数据。
导出单个数据库
docker exec -i <container_name_or_id> pg_dump -U <用户名> -d <数据库名> -F c > <主机文件路径>
示例:
docker exec -i postgres-container pg_dump -U postgres -d mydb -F c > /home/user/mydb.dump
导出为 SQL 脚本
docker exec -i postgres-container pg_dump -U postgres -d mydb -F p > /home/user/mydb.sql
导出整个数据库集群
docker exec -i postgres-container pg_dumpall -U postgres > /home/user/all_databases.sql
7. 导出表为 CSV(可选)
如果只需要导出某张表的数据为 CSV,可以使用以下命令:
docker exec -i <container_name_or_id> psql -U <用户名> -d <数据库名> -c "\COPY <表名> TO '/tmp/<表名>.csv' CSV HEADER"
然后将 CSV 文件从容器拷贝到主机:
docker cp <container_name_or_id>:/tmp/<表名>.csv <主机路径>
总结
- 登录容器:使用
docker exec进入容器。 - 使用
pg_dump或pg_dumpall:导出数据库或整个集群。 - 拷贝文件到主机:使用
docker cp将容器内的导出文件复制到主机。 - 直接导出到主机(可选):使用
docker exec将数据直接导出到主机文件系统。
如果有其他问题,请随时告诉我!
以下是 PostgreSQL 的登录操作及常用查询命令的详细说明,包括如何登录数据库、基础操作和常用 SQL 查询。
1. 登录 PostgreSQL
1.1 登录到 PostgreSQL
在终端中使用 psql 命令登录 PostgreSQL 数据库。
本地登录
psql -U <用户名> -d <数据库名>
示例:
psql -U postgres -d mydb
-U <用户名>:指定登录 的数据库用户(如postgres)。-d <数据库名>:指定要连接的数据库名称。
如果 PostgreSQL运行在不同的主机或端口上:
psql -h <主机地址> -p <端口号> -U <用户名> -d <数据库名>
示例:
psql -h 127.0.0.1 -p 5432 -U postgres -d mydb
1.2 登录到 PostgreSQL 容器
如果 PostgreSQL 运行在 Docker 容器中,可以通过以下方式登录:
-
进入容器:
docker exec -it <container_name_or_id> bash -
登录 PostgreSQL:
psql -U <用户名> -d <数据库名>
或者直接运行:
docker exec -it <container_name_or_id> psql -U <用户名> -d <数据库名>
2. 常用命令
2.1 数据库相关操作
查看所有数据库
\l
切换数据库
\c <数据库名>
示例:
\c mydb
创建数据库
CREATE DATABASE <数据库名>;
示例:
CREATE DATABASE mydb;
删除数据库
DROP DATABASE <数据库名>;
示例:
DROP DATABASE mydb;
2.2 用户相关操作
查看所有用户
\du
创建用户
CREATE USER <用户名> WITH PASSWORD '<密码>';
示例:
CREATE USER myuser WITH PASSWORD 'mypassword';
删除用户
DROP USER <用户名>;
示例:
DROP USER myuser;
给用户赋予权限
GRANT ALL PRIVILEGES ON DATABASE <数据库名> TO <用户名>;
示例:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
2.3 表相关操作
查看当前数据库中的所有表
\dt
创建表
CREATE TABLE <表名> (
<列名1> <数据类型> [约束],
<列名2> <数据类型> [约束],
...
);
示例:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
age INT,
email VARCHAR(100)
);
删除表
DROP TABLE <表名>;
示例:
DROP TABLE users;